﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace QuanLyHocPhi.BLL
{
    partial class CommonUtils
    {
        /// <summary>
        /// Hàm trả về chuỗi biểu diễn PHẦN NGUYÊN của một giá trị decimal?
        /// </summary>
        /// <param name="value"></param>
        /// <param name="nullValue"></param>
        /// <returns></returns>
        public static string StringOf(Decimal? value, string nullValue = "")
        {
            if (value.HasValue)
                return StringOf(value.Value);
            else
                return nullValue;
        }

        public static string StringOf(decimal decimalValue)
        {
            return StringOf(Convert.ToInt32(decimalValue));
        }

        public static string StringOf(int value)
        {
            string stGroupSeparator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyGroupSeparator;
            string stValue = Convert.ToInt32(value).ToString();
            StringBuilder sb = new StringBuilder();
            int idx = 0;
            for (int i = stValue.Length - 1; i >= 0; i--)
            {
                idx++;
                sb.Insert(0, stValue[i]);
                if (idx % 3 == 0 && i > 0)
                    sb.Insert(0, stGroupSeparator);
            }
            return sb.ToString();
        }

        public static string StringOf(DateTime? datetime, string format = "dd/MM/yyyy", string nullValue = "?")
        {
            if (datetime.HasValue)
                return datetime.Value.ToString(format);
            else
                return nullValue;

        }

        /// <summary>
        /// Lấy giá trị ngày tháng
        /// </summary>
        /// <param name="stDate">Chuỗi biểu diễn theo định dạng dd/MM/yyyy</param>
        /// <param name="valueOnError"></param>
        /// <returns></returns>
        public static DateTime? DateOf(string stDate, DateTime? valueOnError = null)
        {
            if (stDate.IsNullOrEmpty())
                return valueOnError;
            stDate = stDate.Trim();
            if (stDate.IsNullOrEmpty())
                return valueOnError;
            DateTime? result = valueOnError;
            try
            {
                string[] info = stDate.Split('/');
                if (info.Length == 3)
                {
                    int day = Convert.ToInt16(info[0]);
                    int month = Convert.ToInt16(info[1]);
                    int year = Convert.ToInt16(info[2]);
                    result = new DateTime(year, month, day);
                }
                else
                    throw new Exception();
            }
            catch
            {
                throw new Exception("Định dạng ngày tháng không hợp lệ! (dd/MM/yyyy)");
            }
            return result;
        }

        internal static bool BoolOf(object oValue, bool valueOnNull)
        {
            if (oValue == null || oValue == DBNull.Value)
                return valueOnNull;
            else
            {
                string stValue = oValue.ToString().Trim().ToUpper();
                return (stValue == "TRUE" || stValue == "NAM" || stValue == "ĐÚNG");
            }
        }
    }
}
